package chapter14.section6;

// 程序14-10：一个简单的JOptionPane.showConfirmDialog风格的实现

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CustomDialog extends JDialog implements ActionListener {
    private final JTextField txtInfo;// 设置输入框

    /**
     * @param owner        对话框的所有者
     * @param title        对话框的标题
     * @param modalityType 如果为真，则对话框显示时，阻塞所有其它操作，即模态对话框
     */
    public CustomDialog(Window owner, String title, ModalityType modalityType) {
        super(owner, title, modalityType);
        Box vbox = Box.createVerticalBox();// 创建一个容器内组件垂直排列的box

        JLabel lblTitle = new JLabel("请输入信息");
        vbox.add(lblTitle);
        // 在Label和JTextField组件中间添加一个高度为20像素的透明组件
        vbox.add(Box.createRigidArea(new Dimension(0, 20)));
        txtInfo = new JTextField();
        vbox.add(txtInfo);
        // 为了将两个按钮水平排列，所以将它们放入一个水平Box容器中
        Box hbox = Box.createHorizontalBox();
        // 首先添加一个Glue，则使得两个按钮只能靠右对齐，
        hbox.add(Box.createHorizontalGlue());
        JButton btnOk = new JButton("确认");
        btnOk.addActionListener(this);
        hbox.add(btnOk);
        hbox.add(Box.createRigidArea(new Dimension(20, 0)));
        JButton btnCancel = new JButton("取消");
        btnCancel.addActionListener(this);
        hbox.add(btnCancel);
        vbox.add(hbox);// 将水平Box作为一个组件添加到垂直Box容器中
        this.add(vbox);// 添加到Jpanel容器中
        this.pack();// 按照实际的容器尺寸，布局容器内组件
        this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }

    public void showInputDialog() {
        this.setVisible(true);
    }

    // 提供给外部使用的方法来获得收入的内容
    public String getInput() {
        return txtInfo.getText().trim();
    }

    public void actionPerformed(ActionEvent e) {
        this.dispose();// 释放屏幕等资源
    }
}